package itsm.isperp.framework.collection.tree;

import itsm.isperp.framework.domain.IBean;

import java.util.List;

/**
 * 树形模型接口，树形结构的实体必须继承此接口。
 * <p>
 * 服务（service）类可以通过实现<cod>itsm.isperp.framework.data.commons.TreeNdeRepository</
 * code>接口，通过使用树形构造器 <cod>itsm.isperp.framework.</code>构造相关的节点信息
 * </p>
 * <p>
 * 使用：
 * <ul>
 * <li>
 * 1.所有子节点查询：treenode_path like '0_1_%';</li>
 * <li>
 * 2.列表结果显示：
 * <table>
 * <tr>
 * <th>名称</th>
 * <th>节点</th>
 * </tr>
 * <tr>
 * <td>品牌策划</td>
 * <td>xx公司/策划部/品牌策划</td>
 * </tr>
 * </table>
 * </li>
 * </ul>
 * </p>
 * 
 * @author Lizx
 * 
 */
public interface ITreeNode extends IBean {

	/**
	 * 默认的路径分割符号
	 */
	public static final Character DEFAULT_PATH_SEPARATOR = '/';

	/**
	 * 获取父节点id
	 * 
	 * @return 父节点id
	 */
	public String getParentId();

	/**
	 * 设置父节点id
	 * 
	 * @param parentId
	 *            父节点id
	 */
	public void setParentId(String parentId);

	// /**
	// * 获取父节点
	// *
	// * @return 父节点实体
	// */
	// public T getParent();
	//
	// /**
	// * 设置父节点
	// *
	// * @param parent
	// * 父节点实体
	// */
	// public void setParent(T parent);

	/**
	 * 获取节点名字
	 * 
	 * @return 节点名字
	 */
	public String getName();

	/**
	 * 设置节点名字
	 * 
	 * @param name
	 *            节点名字
	 */
	public void setName(String name);

	/**
	 * 获取属性节点文本
	 * 
	 * @return 节点文本
	 */
	public String getText();

	/**
	 * 获取节点路径（以 "_" 分割） <br />
	 * 例如：
	 * <ul>
	 * <li>1_2</li>
	 * <li>1_3_4_</li>
	 * </ul>
	 * 
	 * @return 节点路径
	 */
	public String getTreenodePath();

	/**
	 * 设置节点路径
	 * 
	 * @param treenodePath
	 */
	public void setTreenodePath(String treenodePath);

	/**
	 * 获取节点名称全路径（以"/"分割） <br />
	 * 例如：
	 * <ul>
	 * <li>xx公司/财务部</li>
	 * <li>xx公司/策划部/品牌策划</li>
	 * </ul>
	 * 
	 * @return 节点路径
	 */
	public String getTreenodeNamePath();

	/**
	 * 
	 * @param
	 */
	public void setTreenodeNamePath(String treenodeNamePath);

	/**
	 * 获取所有子节点
	 * 
	 * @return 子节点列表
	 */
	public List<? extends ITreeNode> getChildren();

	/**
	 * 设定节点的子节点
	 * 
	 * @param children
	 *            子节点列表
	 */
	public void setChildren(List<? extends ITreeNode> children);

	/**
	 * 是否为叶节点
	 * 
	 * @return 返回所有叶节点
	 */
	boolean isLeaf();

	void setLeaf(boolean leaf);

	boolean isIsParent();

	public boolean isOpen();

	public void setOpen(boolean open);

	public Integer getOrderNum();

	public void setOrderNum(Integer orderNum);

	public String getIcon();

	public void setIcon(String icon);

	public void setChecked(Boolean checked);

}
